/*
 * pid.h
 *
 *  Created on: Apr 2, 2024
 *      Author: boen
 */

#ifndef INTERFACELIBS_XBOT_LIBS_PID_H_
#define INTERFACELIBS_XBOT_LIBS_PID_H_

#include <platform.h>

typedef struct
{
	float SetTarget; 		//定义设定值
	float OutTarget;        //定义输出值
	float err; 				//定义偏差值
	float err_next; 		//定义上一个偏差值
	float err_last; 		//定义最上前的偏差值
	float Kp,Ki,Kd; 		//定义比例、积分、微分系数
}PID_t;


/**
 * @brief PID控制更新
 * @param self PID控制器对象指针
 * @param actual 当前的实际值
 * @param 距离上次更新的时间间隔
 * @retval 控制量
 */
float pid_update(PID_t *self, float target);



/**
 * @brief 初始化PID控制器
 * @param self 要初始化的PID控制器指针
 * @param kp 比例增益
 * @param ki 积分增益
 * @param kd 微分增益
 * @retval None.
 */
void pid_init(PID_t *self, float kp, float ki, float kd);

#endif /* INTERFACELIBS_XBOT_LIBS_PID_H_ */
